package com.springtest.jdbc;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import java.util.List;

public class AccountDaoImpl implements AccountDao {
    // 声明 JdbcTemplate 属性及其 setter 方法
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    //添加账户
    public int addAccount(Account account) {
        // 定义 SQL
        String sql="insert into account(username,balance) value(?,?)";
        // 定义数组来存储 SQL 语句中的参数
        Object[] obj=new  Object[]{
                account.getUsername(),
                account.getBalance(),
        };
        // 执行添加操作，返回的是受 SQL 语句影响的记录条数
        int num =this.jdbcTemplate.update(sql,obj);
        return num;
    }

    @Override
    public int updateAccount(Account account) {
        String sql="update account set username=?,balance=? where id = ?";
        Object[] params = new Object[]{
                account.getUsername(),
                account.getBalance(),
                account.getId()
        };
        int num = jdbcTemplate.update(sql,params);
        return num;
    }

    @Override
    public int deleteAccount(Integer id) {
        // 定义 SQL
        String sql = "delete from account where id = ? ";
        // 执行删除操作，返回的是受 SQL 语句影响的记录条数
        int num = this.jdbcTemplate.update(sql, new Object[]{id});
        return num;
    }

    @Override
    public Account findAccountById(int id) {
//定义 SQL 语句
        String sql = "select * from account where id = ?";
// 创建一个新的 BeanPropertyRowMapper 对象
         RowMapper  rowMapper =new BeanPropertyRowMapper(Account.class);
// 将 id 绑定到 SQL 语句中，并通过 RowMapper 返回一个 Object 类型的单行记录
        return (Account) this.jdbcTemplate.queryForObject(sql,new Object[]{id},rowMapper);
    }

    @Override
    public List<Account> findAllAccount() {
        // 定义 SQL 语句
        String sql = "select * from account";
// 创建一个新的 BeanPropertyRowMapper 对象
        RowMapper rowMapper = new BeanPropertyRowMapper(Account.class);
// 执行静态的 SQL 查询，并通过 RowMapper 返回结果
        return this.jdbcTemplate.query(sql, rowMapper);
    }
}
